
Rajinder Singh
Deep Learning Researcher

वेब ऑटोमेशन डेटा संग्रहण, परीक्षण और विभिन्न व्यावसायिक ऑपरेशन के लिए आवश्यक हो गया है। हालांकि, आधुनिक वेबसाइटें ड्रिस्शनपेज और कैपसॉल्वर के संयोजन के साथ वेब ऑटोमेशन के लिए एक शक्तिशाली समाधान प्रदान करते हैं:
इन टूल्स के संयोजन से वेब ऑटोमेशन के ब्राउज़र ड्राइवर की पहचान और कैपचा चुनौतियों के बिना बिना किसी मानवीय हस्तक्षेप के समाधान के साथ निरंतर ऑटोमेशन संभव हो जाता है।
इस गाइड आपके तीन मुख्य लक्ष्य प्राप्त करने में मदद करेगा:
DrissionPage पायथन-आधारित वेब ऑटोमेशन टूल है जो ब्राउज़र नियंत्रण के साथ HTTP मांग क्षमता के साथ जुड़ा हुआ है। सेलेनियम के विपरीत, यह वेबड्राइवर पर निर्भर नहीं करता है, इसलिए इसे पहचाना जाना कठिन होता है।
# DrissionPage स्थापित करें
pip install DrissionPage
# कैपसॉल्वर API के लिए requests लाइब्रेरी स्थापित करें
pip install requests
from DrissionPage import ChromiumPage
# ब्राउज़र अनुभव बनाएं
page = ChromiumPage()
# URL पर जाएं
page.get('https://wikipedia.org')
# तत्वों को खोजें और बातचीत करें
page('#search-input').input('हैलो वर्ल्ड')
page('#submit-btn').click()
CapSolver एक एआई-आधारित स्वचालित कैपचा हल करने वाली सेवा है जो विस्तृत कैपचा प्रकारों के साथ काम करती है। यह आपको कैपचा चुनौतियों को जमा करने और कुछ सेकंड में समाधान प्राप्त करने के लिए एक सरल API प्रदान करता है।
https://api.capsolver.comhttps://api-stable.capsolver.comकैपसॉल्वर के साथ ड्रिस्शनपेज के संयोजन से पहले, वेब ऑटोमेशन कई दुखद चुनौतियों का सामना करता रहा है:
| चुनौति | प्रभाव |
|---|---|
| WebDriver पहचान | सेलेनियम स्क्रिप्ट तुरंत ब्लॉक कर दिया जाता है |
| कैपचा चुनौतियां | मैनुअल समाधान की आवश्यकता होती है, ऑटोमेशन तोड़ देता है |
| iframe जटिलता | एम्बेडेड सामग्री से बातचीत करना कठिन होता है |
| मल्टी-टैब संचालन | जटिल टैब स्विचिंग तंत्र की आवश्यकता होती है |
ड्रिस्शनपेज + कैपसॉल्वर एकीकरण एक ही वर्कफ़्लो में इन सभी चुनौतियों का समाधान करता है।
API एकीकरण दृष्टिकोण कैपचा हल करने प्रक्रिया के पूर्ण नियंत्रण प्रदान करता है और किसी भी कैपचा प्रकार के साथ काम करता है।
pip install DrissionPage requests
import time
import requests
from DrissionPage import ChromiumPage
CAPSOLVER_API_KEY = "आपका API की"
CAPSOLVER_API = "https://api.capsolver.com"
def create_task(task_payload: dict) -> str:
"""कैपचा हल करने के कार्य को बनाएं और कार्य पहचानकर्ता लौटाएं।"""
response = requests.post(
f"{CAPSOLVER_API}/createTask",
json={
"clientKey": CAPSOLVER_API_KEY,
"task": task_payload
}
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"कैपसॉल्वर त्रुटि: {result.get('errorDescription')}")
return result["taskId"]
def get_task_result(task_id: str, max_attempts: int = 120) -> dict:
"""समाधान या समय सीमा समाप्त होने तक कार्य परिणाम के लिए पॉल करें।"""
for _ in range(max_attempts):
response = requests.post(
f"{CAPSOLVER_API}/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
)
result = response.json()
if result.get("status") == "ready":
return result["solution"]
elif result.get("status") == "failed":
raise Exception(f"कार्य विफल: {result.get('errorDescription')}")
time.sleep(1)
raise TimeoutError("कैपचा हल करने में समय सीमा समाप्त हो गई")
def solve_captcha(task_payload: dict) -> dict:
"""कैपचा हल करने की पूर्ण प्रक्रिया पूरी करें।"""
task_id = create_task(task_payload)
return get_task_result(task_id)
आप कैपसॉल्वर ब्राउज़र एक्सटेंशन के साथ ड्रिस्शनपेज का उपयोग कर सकते हैं जो एक अधिक हस्तक्षेप रहित दृष्टिकोण प्रदान करता है।
config.js फ़ाइल में अपने API की कॉन्फ़िगरेशन करें:// एक्सटेंशन फ़ोल्डर में, संपादित करें: assets/config.js
var defined = {
apiKey: "आपका कैपसॉल्वर API की", // अपने वास्तविक API की बदलें
enabledForBlacklistControl: false,
blackUrlList: [],
enabledForRecaptcha: true,
enabledForRecaptchaV3: true,
enabledForTurnstile: true,
// ... अन्य सेटिंग्स
}
from DrissionPage import ChromiumPage, ChromiumOptions
co = ChromiumOptions()
co.add_extension('/path/to/capsolver-extension')
page = ChromiumPage(co)
# एक्सटेंशन कैपचा को स्वचालित रूप से पहचानेगा और हल करेगा
नोट: एक्सटेंशन कैपचा को स्वचालित रूप से हल कर सकता है, लेकिन इसके लिए एक वैध API की कॉन्फ़िगरेशन आवश्यक है।
क्लाउडफ़्लेर टर्नस्टाइल एक सबसे आम कैपचा चुनौति है। यहां इसके हल करने का तरीका है:
import time
import requests
from DrissionPage import ChromiumPage
CAPSOLVER_API_KEY = "आपका API की"
CAPSOLVER_API = "https://api.capsolver.com"
def solve_turnstile(site_key: str, page_url: str) -> str:
"""क्लाउडफ़्लेर टर्नस्टाइल को हल करें और टोकन लौटाएं।"""
# कार्य बनाएं
response = requests.post(
f"{CAPSOLVER_API}/createTask",
json={
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": page_url,
"websiteKey": site_key,
}
}
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"त्रुटि: {result.get('errorDescription')}")
task_id = result["taskId"]
# परिणाम के लिए पॉल करें
while True:
result = requests.post(
f"{CAPSOLVER_API}/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
).json()
if result.get("status") == "ready":
return result["solution"]["token"]
elif result.get("status") == "failed":
raise Exception(f"विफल: {result.get('errorDescription')}")
time.sleep(1)
def main():
लक्ष्य_पृष्ठ = "https://आपका-लक्ष्य-साइट.com"
टर्नस्टाइल_साइट_की = "0x4XXXXXXXXXXXXXXXXX" # पृष्ठ के स्रोत में ढूंढें
# ब्राउज़र अनुभव बनाएं
page = ChromiumPage()
page.get(लक्ष्य_पृष्ठ)
# टर्नस्टाइल लोड होने के लिए प्रतीक्षा करें
page.wait.ele_displayed('input[name="cf-turnstile-response"]', timeout=10)
# कैपचा हल करें
टोकन = solve_turnstile(टर्नस्टाइल_साइट_की, लक्ष्य_पृष्ठ)
print(f"टर्नस्टाइल टोकन प्राप्त किया: {टोकन[:50]}...")
# टोकन को जावास्क्रिप्ट के माध्यम से निवेश करें
page.run_js(f'''
document.querySelector('input[name="cf-turnstile-response"]').value = "{टोकन}";
// यदि उपलब्ध हो तो कॉलबैक ट्रिगर करें
const callback = document.querySelector('[data-callback]');
if (callback) {{
const callbackName = callback.getAttribute('data-callback');
if (window[callbackName]) {{
window[callbackName]('{टोकन}');
}}
}}
''')
# फॉर्म जमा करें
page('button[type="submit"]').click()
page.wait.load_start()
print("टर्नस्टाइल को सफलतापूर्वक पार कर गए!")
if __name__ == "__main__":
main()
इस उदाहरण में पृष्ठ से साइट की स्वचालित रूप से पहचाना जाता है - कोई मैनुअल कॉन्फ़िगरेशन की आवश्यकता नहीं होती है:
import time
import requests
from DrissionPage import ChromiumPage, ChromiumOptions
CAPSOLVER_API_KEY = "आपका API की"
CAPSOLVER_API = "https://api.capsolver.com"
def solve_recaptcha_v2(site_key: str, page_url: str) -> str:
"""reCAPTCHA v2 को हल करें और टोकन लौटाएं।"""
# कार्य बनाएं
response = requests.post(
f"{CAPSOLVER_API}/createTask",
json={
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": page_url,
"websiteKey": site_key,
}
}
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"त्रुटि: {result.get('errorDescription')}")
task_id = result["taskId"]
print(f"कार्य बनाया गया: {task_id}")
# परिणाम के लिए पॉल करें
while True:
result = requests.post(
f"{CAPSOLVER_API}/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
elif result.get("status") == "failed":
raise Exception(f"विफल: {result.get('errorDescription')}")
time.sleep(1)
def main():
# केवल URL प्रदान करें - साइट की स्वचालित रूप से पहचानी जाएगी
लक्ष्य_पृष्ठ = "https://www.google.com/recaptcha/api2/demo"
# ब्राउज़र कॉन्फ़िगर करें
co = ChromiumOptions()
co.set_argument('--disable-blink-features=AutomationControlled')
print("ब्राउज़र शुरू कर रहा है...")
page = ChromiumPage(co)
try:
page.get(लक्ष्य_पृष्ठ)
time.sleep(2)
# पृष्ठ से साइट की स्वचालित रूप से पहचानें
recaptcha_div = page('.g-recaptcha')
if not recaptcha_div:
print("पृष्ठ पर कोई reCAPTCHA नहीं मिला!")
return
site_key = recaptcha_div.attr('data-sitekey')
print(f"स्वचालित रूप से पहचानी गई साइट की: {site_key}")
# कैपचा हल करें
print("reCAPTCHA v2 हल कर रहा है...")
token = solve_recaptcha_v2(site_key, लक्ष्य_पृष्ठ)
print(f"टोकन प्राप्त किया: {token[:50]}...")
# टोकन निवेश करें
page.run_js(f'''
var responseField = document.getElementById('g-recaptcha-response');
responseField.style.display = 'block';
responseField.value = '{token}';
''')
print("टोकन निवेश किया गया!")
# फॉर्म जमा करें
submit_btn = page('#recaptcha-demo-submit') or page('input[type="submit"]') or page('button[type="submit"]')
if submit_btn:
submit_btn.click()
time.sleep(3)
print("फॉर्म जमा कर दिया!")
print(f"वर्तमान URL: {page.url}")
print("सफलता!")
finally:
page.quit()
if __name__ == "__main__":
main()
खुद इसे परीक्षण करें:
python recaptcha_demo.py
इससे गूगल के reCAPTCHA डेमो पृष्ठ खुलेगा, साइट की स्वचालित रूप से पहचानेगा, कैपचा हल करेगा और फॉर्म जमा करेगा।
reCAPTCHA v3 स्कोर-आधारित है और उपयोगकर्ता अंतरक्रिया की आवश्यकता नहीं होती है। आपको कार्य पैरामीटर बताना होगा।
import time
import requests
from DrissionPage import ChromiumPage, ChromiumOptions
CAPSOLVER_API_KEY = "आपका API की"
CAPSOLVER_API = "https://api.capsolver.com"
def solve_recaptcha_v3(
site_key: str,
page_url: str,
action: str = "verify",
min_score: float = 0.7
) -> str:
"""निर्दिष्ट कार्य और न्यूनतम स्कोर के साथ reCAPTCHA v3 हल करें।"""
response = requests.post(
f"{CAPSOLVER_API}/createTask",
json={
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV3TaskProxyLess",
"websiteURL": page_url,
"websiteKey": site_key,
"pageAction": action,
"minScore": min_score
}
}
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"त्रुटि: {result.get('errorDescription')}")
task_id = result["taskId"]
while True:
result = requests.post(
f"{CAPSOLVER_API}/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
elif result.get("status") == "failed":
raise Exception(f"विफल: {result.get('errorDescription')}")
time.sleep(1)
def main():
लक्ष्य_पृष्ठ = "https://आपका-लक्ष्य-साइट.com"
recaptcha_v3_key = "6LcXXXXXXXXXXXXXXXXXXXXXXXXX"
# v3 के लिए हेडलेस ब्राउज़र सेट करें
co = ChromiumOptions()
co.headless()
page = ChromiumPage(co)
page.get(लक्ष्य_पृष्ठ)
# "खोज" कार्य के साथ reCAPTCHA v3 हल करें
print("reCAPTCHA v3 हल कर रहा है...")
token = solve_recaptcha_v3(
recaptcha_v3_key,
लक्ष्य_पृष्ठ,
action="खोज",
min_score=0.9 # उच्च स्कोर के लिए अनुरोध करें
)
# टोकन के साथ कॉलबैक चलाएं
page.run_js(f'''
// यदि कॉलबैक फ़ंक्शन उपलब्ध है, तो इसे टोकन के साथ कॉल करें
if (typeof onRecaptchaSuccess === 'function') {{
onRecaptchaSuccess('{token}');
}}
''')
print("टंत्र चलाया गया!")
print(f"वर्तमान URL: {page.url}")
print("सफलता!")
if __name__ == "__main__":
main()
ड्रिसनपेज + कैपसॉल्वर: उन्नत वेब ऑटोमेशन के साथ कैप्चा बाउंस तकनीकें
ड्रिसनपेज और कैपसॉल्वर के संयोजन ने वेब ऑटोमेशन के लिए एक शक्तिशाली टूलकिट बनाया है:
क्या आप वेब स्क्रैपर, ऑटोमेटेड टेस्टिंग प्रणाली या डेटा एकत्रीकरण पाइपलाइन बना रहे हैं, इस संयोजन के साथ आपको आवश्यक विश्वसनीयता और छिपावट मिलती है।
बोनस: कैपसॉल्वर पर पंजीकरण करते समय कोड
DRISSIONका उपयोग करें ताकि बोनस क्रेडिट मिले!
ड्रिसनपेज और कैपसॉल्वर के संयोजन ने वेब ऑटोमेशन के लिए एक शक्तिशाली टूलकिट बनाया है:
क्या आप वेब स्क्रैपर, ऑटोमेटेड टेस्टिंग प्रणाली या डेटा एकत्रीकरण पाइपलाइन बना रहे हैं, इस संयोजन के साथ आपको आवश्यक विश्वसनीयता और छिपावट मिलती है।
बोनस: कैपसॉल्वर पर पंजीकरण करते समय कोड
DRISSIONका उपयोग करें ताकि बोनस क्रेडिट मिले!
ड्रिसनपेज ड्राइवर का उपयोग नहीं करता है, इसका मतलब है:
कैपसॉल्वर सभी प्रमुख कैप्चा प्रकारों का समर्थन करता है। क्लाउडफ़ेयर टर्नस्टाइल और reCAPTCHA v2/v3 के उच्चतम सफलता दर हैं। एकीकरण किसी भी कैप्चा के साथ सुचारू रूप से काम करता है जिसका समर्थन कैपसॉल्वर करता है।
हां! ड्रिसनपेज हेडलेस मोड का समर्थन करता है। reCAPTCHA v3 और टोकन-आधारित कैप्चा के लिए, हेडलेस मोड पूरी तरह से काम करता है। v2 दृश्य कैप्चा के लिए, हेडेड मोड बेहतर परिणाम प्रदान कर सकता है।
पेज स्रोत में देखें:
data-sitekey लक्षण या cf-turnstile तत्वg-recaptcha डिव पर data-sitekey लक्षणआम समाधान:
हां! ड्रिसनपेज के पास ChromiumShadowElement वर्ग के माध्यम से शैडो डीओएम तत्वों के लिए बिल्ट-इन समर्थन है।
Rust में वेब स्क्रैपिंग के स्केलेबल आर्किटेक्चर सीखें, reqwest, scraper, असिंक्रोनस स्क्रैपिंग, हेडलेस ब्राउज़र स्क्रैपिंग, प्रॉक्सी रोटेशन, और संगत CAPTCHA का निपटारा।

CapSolver के साथ RoxyBrowser के एकीकरण करें ताकि ब्राउज़र के कार्यों को स्वचालित किया जा सके और reCAPTCHA, Turnstile और अन्य CAPTCHAs को बायपास किया जा सके।
